package com.gengzp.system.service;

import com.gengzp.common.model.permission.req.AssignPermissionsToRoleReq;
import com.gengzp.common.model.permission.req.AssignRoleToUserReq;
import com.gengzp.common.model.permission.resp.SearchPermissionResp;
import com.gengzp.common.model.permission.resp.SearchUserPermissionResp;
import com.gengzp.common.model.permission.resp.SearchUserRoleRelationResp;

/**
 * @ClassName IPermissionService
 * @Description 权限管理服务层接口
 * @Author gengzp
 * @Date 2025/5/16 21:39
 */
public interface IPermissionService {

    /**
     * 查询系统权限
     *
     * @return 查询系统权限返回对象, 树结构
     */
    SearchPermissionResp searchPermission();

    /**
     * 为用户分配角色
     *
     * @param req 分配用户角色请求实体
     */
    void assignRoles2User(AssignRoleToUserReq req);

    /**
     * 为角色分配权限
     *
     * @param req 分配角色权限请求实体
     */
    void assignPermissions2Role(AssignPermissionsToRoleReq req);

    /**
     * 根据用户id查询用户角色关系
     *
     * @param userId 用户id
     * @return 查询用户角色关系返回对象
     */
    SearchUserRoleRelationResp searchUserRoleRelation(Long userId);

    /**
     * 根据用户id查询拥有的权限
     *
     * @param userId 用户id
     * @return 用户权限信息
     */
    SearchUserPermissionResp searchPermissionByUserId(Long userId);

    /**
     * 解绑用户和角色
     *
     * @param userId 用户id
     * @param roleId 角色id
     */
    void unbindUserRoleRelation(Long userId, Long roleId);

    /**
     * 刷新缓存中的角色权限信息
     */
    void refreshCachePermissions();

}
